export default class Bird {
  init(game) {
    this.game = game;
    // 宽度
    this.w = 85;
    // 高度
    this.h = 60;
    // 状态 0，1，2
    this.type = 0;
    // y轴
    this.y = 100;
    // x轴
    this.x = game.canvas.width / 2 - this.w / 2;
    // 速度
    this.speed = 5;
    // 上升下落状态 0-下落 1-上身
    this.state = 0;
    //重力加速度下落的Y值
    this.dy = 0;
    // 当前帧：根据当前帧作为参照物，计算出重力加速度
    this.currentFrame = this.game.frameUtil.currentFrame;
    // 旋转角度
    this.ro = 1.5;
    // 向上变量
    this.deltaY = 1;
    // 绑定点击事件
    this.bindClick()
    // 是否死亡
    this.die = false;
    // blood得属性
    this.bloodW = 1625/5;
    this.bloodH = 828/6;
    this.bloodRowNum = 5;
    this.bloodIndex = 0;
  }
  render() {
    if(this.die){
      // 死亡动画
      this.dieAnimate()
      return false;
    }
    // 旋转
    this.game.ctx.save();
    let pointX = this.x + this.w/2
    let pointY = this.y + this.h/2
    this.game.ctx.translate(pointX,pointY)
    this.game.ctx.rotate(this.ro *Math.PI / 180);
    this.game.ctx.translate(-pointX,-pointY)
    // 绘制小鸟
    // img:规定要使用的图像 ,
    // sx:开始剪切的 x 坐标位置，  sy:开始剪切的 y 坐标位置 ,
    // swidth:被剪切图像的宽度，sheight:被剪切图像的高度,
    // x:在画布上放置图像的 x 坐标位置，Y:在画布上放置图像的 y 坐标位置。
    // width:要使用的图像的宽度 ， height:要使用的图像的高度
    this.game.ctx.drawImage(
      this.game.images.bird,
      this.type * this.w,
      0,
      this.w,
      this.h,
      this.x,
      this.y,
      this.w,
      this.h
    );
    
    this.game.ctx.restore();
  }
  update() {
    // 根据帧数来更新翅膀煽动频率
    if (this.game.frameUtil.currentFrame % this.speed === 0) {
      // 0 1 2
      this.type++;
      if (this.type >= 3) {
        this.type = 0;
      }
      //   下落
      if (this.state === 0) {
        
        // 角度自增
        this.ro +=3;
        this.dropFrame = this.currentFrame - this.game.frameUtil.currentFrame;
        this.dy = 0.01 * Math.pow(this.dropFrame, 2); //重力加速度下落的Y值
      }else if(this.state === 1){ //上升
        // 向上变量递增
        this.deltaY+=1;
        this.dy = this.deltaY - 15;
        // 上升高度到达临界值，改变方向
        if(this.dy >= 0){
          this.state = 0;
          this.currentFrame = this.game.frameUtil.currentFrame;
        }
      }
      this.y += this.dy;
      // 天空，地板碰撞检测
      if(this.y<0){
        this.y=0
      }
      if(this.y>=this.game.height-this.h-48){
        
        this.game.pause();
      }
    }
  }
  bindClick(){
    this.game.canvas.addEventListener("click",()=>{
      // 上升
      this.state = 1;
      // 向上旋转
      this.ro = -25;
      this.deltaY = 1;
      // 速度变慢
      this.speed = 3;
    })
  }
  dieAnimate(){
      // 死亡动画
      this.bloodIndex++
      let row = Math.floor(this.bloodIndex/this.bloodRowNum);
      let col = this.bloodIndex % this.bloodRowNum;
      this.game.ctx.drawImage(this.game.images.blood,col*this.bloodW,row*this.bloodH,this.bloodW,this.bloodH,this.x,this.y,this.bloodW-150,this.bloodH)
      if(row>=5 && col>=4){
        // 游戏结束
        this.game.gameEnd();
      }
      
   
  }
}
